The coupling of processor nodes by data networks to permit the cooperation and sharing of data and resources has long been of recognized value. Distributed processing systems have been developed to harness processing capabilities of many individual processor nodes. Typically, distributed processing systems define each processor node as a client or a server, which runs corresponding software. Distributed applications, i.e. application that run on processor nodes of a distributed processing system, control peripheral devices, and communicate information to remote applications. It is the nature of distributed applications that details of the remote applications are required by the local application. The client/server approach has well known limitations respecting scalability, i.e., as the number of client processor nodes is increased to satisfy increasing processing load, the server (the center of communications and control) becomes a bottleneck of the system. In order to produce a scalable system, the server's communications bandwidth and processing capability must scale with the number of processor clients.
Remote invocation methods which permit applications to share resources over a network, such as Remote Procedure Call (RPC), have also been proposed. Numerous distributed operating systems (OSs) have been developed to take advantage of the features associated with remote invocation methods to permit direct processor node-to-processor node communication. This method does not inherently rely on a client server architecture, which permits designers to overcome the scalability limitations associated with client server-based systems. Distributed operating systems such as Amoeba, and Cajo rely on RPC.
Because of complexity inherent in some distributed operating systems, such as Amoeba, the costs of developing distributed applications are much higher that when creating comparable non-distributed applications. To date all distributed operating systems rely on an RPC-like communication structure.
The RPC protocol was designed to be implemented on a processor node with general purpose capabilities, and as such is not easily implemented on network-enabled hardware devices that do not have processors.
Both of these prior art methods also require the software developer to specify how each application is to be distributed and how the data is to be shared. A method for building distributed applications as easily as non-distributed applications, is therefore desirable.
Additionally, with a proliferation of network-enabled hardware devices, such as cameras, that do not include native processors, there is a need for processorless devices to be able to communicate with a processor node. In some applications of distributed processing systems, it is cost effective to deploy hardware devices that do not have native processors for certain tasks. Hardware devices, such as cameras, produce volumes of data, and it is cost effective to distribute the processing of this data between a number of different processor nodes. A method is therefore needed to enable communications with processorless hardware devices that is also consistent with communications between multiple processor nodes. A scalable distributed architecture is needed to support the processing of this data.
Accordingly it is clear that there remains a need for improved communications between processor nodes and hardware devices.